home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FishMarket 1.0
/
FishMarket v1.0.iso
/
fishies
/
001-025
/
disk_023
/
ver30
/
tty
/
atari
/
tty.c
next >
Wrap
C/C++ Source or Header
|
1992-05-06
|
3KB
|
196 lines
/*
* Name: MicroEMACS
* Atari 520ST terminal.
* Version: 30
* Last edit: 22-Feb-86
* By: rex::conroy
* decvax!decwrl!dec-rhea!dec-rex!conroy
*
* This code simulates scrolling regions by using the
* insert line and delete line functions. Should display
* handling be taught about this. Based on Rich's code
* for the Heath H19.
*/
#include "def.h"
#define BEL 0x07 /* BEL character. */
#define ESC 0x1B /* ESC character. */
#define LF 0x0A /* Line feed. */
extern int ttrow;
extern int ttcol;
extern int tttop;
extern int ttbot;
extern int tthue;
int tceeol = 2; /* Costs. */
int tcinsl = 11;
int tcdell = 11;
/*
* No-op.
*/
ttinit()
{
}
/*
* No-op.
*/
tttidy()
{
}
/*
* Move the cursor to the specified
* origin 0 row and column position. Try to
* optimize out extra moves; redisplay may
* have left the cursor in the right location
* on the screen last time.
*/
ttmove(row, col)
{
if (ttrow!=row || ttcol!=col) {
if (row > nrow)
row = nrow;
if (col > ncol)
col = ncol;
ttputc(ESC);
ttputc('Y');
ttputc(row+' ');
ttputc(col+' ');
ttrow = row;
ttcol = col;
}
}
/*
* Erase to end of line.
*/
tteeol()
{
ttputc(ESC);
ttputc('K');
}
/*
* Erase to end of page.
*/
tteeop()
{
ttputc(ESC);
ttputc('J');
}
/*
* Make a noise.
*/
ttbeep()
{
ttputc(BEL);
ttflush();
}
/*
* Insert nchunk blank line(s) onto the
* screen, scrolling the last line on the
* screen off the bottom. This is done with
* a cluster of clever insert and delete commands,
* because there are no scroll regions.
*/
ttinsl(row, bot, nchunk)
{
register int i;
if (row == bot) {
ttmove(row, 0);
tteeol();
return;
}
ttmove(1+bot-nchunk, 0);
for (i=0; i<nchunk; i++) {
ttputc(ESC);
ttputc('M');
}
ttmove(row, 0);
for (i=0; i<nchunk; i++) {
ttputc(ESC);
ttputc('L');
}
ttrow = row;
ttcol = 0;
}
/*
* Delete nchunk line(s) "row", replacing the
* bottom line on the screen with a blank
* line. This is done with a crafty sequences
* of insert and delete line; there is no scroll
* region on the Heath. The presence of the
* echo area makes a boundry condition
* go away.
*/
ttdell(row, bot, nchunk)
{
register int i;
if (row == bot) {
ttmove(row, 0);
tteeol();
return;
}
ttmove(row, 0);
for (i=0; i<nchunk; i++) {
ttputc(ESC);
ttputc('M');
}
ttmove(1+bot-nchunk,0);
for (i=0; i<nchunk; i++) {
ttputc(ESC);
ttputc('L');
}
ttrow = bot-nchunk;
ttcol = 0;
}
/*
* No-op.
*/
ttwindow(top, bot)
{
}
/*
* No-op.
*/
ttnowindow()
{
}
/*
* Set display color on Heath. Normal
* video is text color. Reverse video is used for
* the mode line.
*/
ttcolor(color)
register int color;
{
if (color != tthue) {
if (color == CTEXT) { /* Normal video. */
ttputc(ESC);
ttputc('q');
} else if (color == CMODE) { /* Reverse video. */
ttputc(ESC);
ttputc('p');
}
tthue = color;
}
}
/*
* No-op.
*/
ttresize()
{
}